package com.cty.B_SpecialDataStructures.C_PriorityQ.PriorityQHeap;

import com.cty.F_common.DataItem;

/**
 * @Auther: cty
 * @Date: 2020/6/15 0:52
 * @Description: 数组堆实现优先级队列
 * 应用场景：
 *      数据量可预测或内存充足时使用 数组实现优先级队列 或 数组堆实现优先级队列
 *          插入比删除重要时，考虑使用数组堆实现优先级队列
 * 重要操作：
 *      ① insert(DataItem): boolean    O(logN)
 *      ② remove(): DataItem    O(logN)
 * @version: 1.0
 */
public class PriorityQHeap {
    private HeapArray heap;

    public PriorityQHeap(int maxSize){
        heap = new HeapArray(maxSize);
    }

    public boolean isEmpty(){
        return heap.isEmpty();
    }

    public void displayPriorityQ(){
        heap.displayArray();
    }

    /**
     * 插入  O(logN)
     * @param item
     * @return
     */
    public boolean insert(DataItem item){
        return heap.insert(item);
    }

    /**
     * 删除最大值  O(logN)
     * @return
     */
    public DataItem remove(){
        return heap.remove();
    }
}  // end PriorityQHeap{}
